// 创建用户相关的小仓库
import { defineStore } from "pinia";
import { userLogin } from "@/api/user/index";
//  引入数据类型
import type { loginForm, loginResponseData } from "@/api/user/type";
import type { UserState } from "./types/type";
// 引入常量路由
import { constantRoute } from "@/router/routes.ts";
// 引入操作本地存储的工具方法
import { SET_TOKEN, GET_TOKEN } from "@/utils/token";

// 创建用户小仓库
const useUserStore = defineStore("User", {
  // 小仓库存储数据的地方
  state: (): UserState => {
    return {
      token: GET_TOKEN(),
      menuRoutes: constantRoute, // 仓库存储生成菜单需要的数组（路由）
    };
  },
  // 异步、逻辑 的地方
  actions: {
    // 登录方法
    async userLogin_(data: loginForm) {
      // 登录请求
      const result: loginResponseData = await userLogin(data);
      // 1. 成功，获取到token
      // 2. 失败，弹窗失败消息
      if (result.code === 200) {
        // pinia 仓库存储一份
        this.token = result.data.token as string;
        // 本地存储 持久化存储一份
        // sessionStorage.setItem('TOKEN', (result.data.token as string));
        SET_TOKEN(result.data.token as string);
        // 能保证当前async函数返回一个成功的Promise
        return "ok";
      } else {
        return Promise.reject(new Error(result.data.message));
      }
    }
  },
  getters: {}
});

// 对外暴露
export default useUserStore;
